/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.eventos.beans;

import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.cip.esymons.eventos.bc.EventoDelegate;
import org.cip.esymons.eventos.bc.ExpectativaEventoDelegate;
import org.cip.esymons.eventos.bc.PreInscripcionEventoDelegate;
import org.cip.esymons.eventos.be.Evento;
import org.cip.esymons.eventos.be.ExpectativaEventos;
import org.cip.esymons.eventos.be.Preevento;
import org.cip.esymons.eventos.be.PreinscripcionEvento;
import org.cip.esymons.general.be.PersonaNatural;

/**
 *
 * @author Lizardo Rios
 */
public class ExpectativaEventoController {

    private ExpectativaEventoDelegate delegado;
    private ExpectativaEventos expectativaEventos;
    List<ExpectativaEventos> listaExpectativas;
    private List<PreinscripcionEvento> listaPreinscripcionEvento;
    private Integer codigoEvento;
    private Long codigoPersona;
    
    /***************************  Constructor *******************************/
    public ExpectativaEventoController() {
        expectativaEventos = new ExpectativaEventos();
        delegado = new ExpectativaEventoDelegate();
        listaExpectativas = new ArrayList<ExpectativaEventos>();
        listaPreinscripcionEvento = new ArrayList<PreinscripcionEvento>();
//        listar();
    }

    /*************************** Setters and Getters  ***********************/
    public ExpectativaEventos getExpectativaEventos() {
        return expectativaEventos;
    }
    public void setExpectativaEventos(ExpectativaEventos expectativaEventos) {
        this.expectativaEventos = expectativaEventos;
    }

    public ExpectativaEventoDelegate getDelegado() {
        return delegado;
    }

    public List<ExpectativaEventos> getListaExpectativas() {
        return listaExpectativas;
    }
    public void setListaExpectativas(List<ExpectativaEventos> listaExpectativas) {
        this.listaExpectativas = listaExpectativas;
    }

    public Integer getCodigoEvento() {
        return codigoEvento;
    }
    public void setCodigoEvento(Integer codigoEvento) {
        this.codigoEvento = codigoEvento;
    }

    public Long getCodigoPersona() {
        return codigoPersona;
    }
    public void setCodigoPersona(Long codigoPersona) {
        this.codigoPersona = codigoPersona;
    }

    public List<PreinscripcionEvento> getListaPreinscripcionEvento() {
        return listaPreinscripcionEvento;
    }
    public void setListaPreinscripcionEvento(List<PreinscripcionEvento> listaPreinscripcionEvento) {
        this.listaPreinscripcionEvento = listaPreinscripcionEvento;
    }

    /*************************** Metodos  ***********************/
    public String guardarExpectativa() {
        try {
            Evento evento = new Evento();
            EventoDelegate delegadoEvento = new EventoDelegate();
            evento = delegadoEvento.find(codigoEvento);
            for (ExpectativaEventos expectativa : listaExpectativas) {
                expectativa.setEveCodigo(evento);
                delegado.edit(expectativa);
            }
            evento = null;
            delegadoEvento = null;
            mostrarMensaje("INFO: ", "Se guardo sastifactoriamente las encuestas.", FacesMessage.SEVERITY_INFO);
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Al guardar encuesta.", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return mostrarExpectativas();
    }

    public String insertarExpectativasFaltantes() {
        EventoDelegate delegadoEvento = new EventoDelegate();
        Evento evento = new Evento();
        evento = delegadoEvento.find(codigoEvento);
        if (evento != null) {
            for (PreinscripcionEvento pre : listaPreinscripcionEvento) {
                ExpectativaEventos exp = new ExpectativaEventos();
                exp.setPreinscripcionEvento(pre);
                exp.setExpCodigo(pre.getPinCodigo());
                exp.setEveCodigo(evento);
                exp.setExpPregunta1("¿Que te parecio el evento?");
                exp.setExpPregunta2("¿Que opina sobre la calidad de expositor?");
                exp.setExpPregunta3("¿Que opina sobre los ambientes?");
                exp.setExpPregunta4("¿Cuales son los temas de interes?");
                delegado.create(exp);
                exp = null;
            }
            evento = null;
        }
        return mostrarExpectativas();
    }

    public String cancelar() {
        expectativaEventos = new ExpectativaEventos();
        return null;
    }

    public String mostrarPreinscripciones() {
        codigoEvento = (codigoEvento == null) ? 0 : codigoEvento;
        listaPreinscripcionEvento = delegado.listarParticipantesFaltantes(codigoEvento);
        return insertarExpectativasFaltantes();
    }

    public String mostrarExpectativas() {
        listaExpectativas = delegado.listarExpectativasXEvento(codigoEvento);
        return null;
    }

    public String insertarPregunta() {
//        ModuloCurso modulo = delegadoModuloCurso.find(codigoModulo);
//        for (Matricula m : listaMatricula) {
//            CalificacionModulo c = new CalificacionModulo();
//            c.setMatCodigo(m);                  //matriculados
//            c.setModCodigo(modulo);             //modulo constante
//            c.setCalPromedio(new Double(0));    //por defecto 0
//            c.setCalEstado(false);              //por defecto sin nota
//            c.setNota1(new Double(0));          //por defecto 0
//            c.setNota2(new Double(0));          //por defecto 0
//            c.setNota3(new Double(0));          //por defecto 0
//            c.setCalNroNotas(nroNotas);          //por defecto las tres notas
//            delegado.create(c);
//            c = null;
//        }
//        modulo = null;
        return mostrarExpectativas();
    }

    public SelectItem[] getComboEventos() {
        try {
            EventoDelegate delegadoEvento = new EventoDelegate();
            System.out.println("Ingreso 1");
            SelectItem[] selects = null;
            List<Preevento> listaEventos = delegadoEvento.listarTodoEventos();
            selects = new SelectItem[listaEventos.size()];
            int cont = 0;
            for (Preevento preevento : listaEventos) {
                SelectItem item = new SelectItem(preevento.getPreCodigo(), preevento.getPreNombre());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen cursos");
            selects[0] = item;
            return selects;
        }
    }

    public SelectItem[] getComboParticipantes() {
        try {
            PreInscripcionEventoDelegate delegadoPreinscripcion = new PreInscripcionEventoDelegate();
            System.out.println("Ingreso 1");
            SelectItem[] selects = null;
            List<PersonaNatural> listaParticipantes = delegadoPreinscripcion.listarParticipantes(codigoEvento);
            delegadoPreinscripcion = null;
            selects = new SelectItem[listaParticipantes.size()];
            int cont = 0;
            for (PersonaNatural persona : listaParticipantes) {
                SelectItem item = new SelectItem(persona.getSolCodigo(), persona.getNombreCompleto());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen instructores del curso");
            selects[0] = item;
            return selects;
        }
    }

    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }



    
}
